package com.tanhua.commons.config;

import com.tanhua.commons.properties.*;
import com.tanhua.commons.templates.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
//自动的读取yml中配置信息，并赋值到SmsProperties、OssProperties对象中，将此对象存入容器
@EnableConfigurationProperties({
        SmsProperties.class,
        OssProperties.class,
        AipFaceProperties.class,
        HuanXinProperties.class,
        HuaWeiUGCProperties.class
})
public class TanhuaAutoConfiguration {

    /**
     * @Bean
     * 1、修饰方法，自动把方法返回的结果加入ioc容器
     * 2、方法参数：
     *    2.1 首先 自动根据参数类型去容器中找改类型的对象注入到方法参数中
     *    2.2 如果类型有多个，根据形参名称去容器中找该名称对应的对象注入
     *    2.3 当然，也可以通过@Qualifier("abc") 指定去容器中找abc对象注入
     *
     */
    @Bean
    public SmsTemplate smsTemplate(SmsProperties smsProperties) {
        SmsTemplate smsTemplate = new SmsTemplate(smsProperties);
        return smsTemplate;
    }

    @Bean
    public OssTemplate ossTemplate(OssProperties ossProperties) {
        return new OssTemplate(ossProperties);
    }

    @Bean
    public AipFaceTemplate aipFaceTemplate(AipFaceProperties properties) {
        return new AipFaceTemplate(properties);
    }

    @Bean
    public HuanXinTemplate huanXinTemplate(HuanXinProperties properties) {
        return new HuanXinTemplate(properties);
    }

    @Bean
    public HuaWeiUGCTemplate huaWeiUGCTemplate(HuaWeiUGCProperties properties) {
        return new HuaWeiUGCTemplate(properties);
    }
}